import {
  BaseCmd,
  BaseView,
  CommonEnum,
  MediaFile,
} from '@/types/global-business';
import { RouteRecordNormalized } from 'vue-router';

export interface User {
  terminal?: CommonEnum; // 登录终端
  primaryId?: bigint; // 主帐号ID
  secondaryId?: bigint; // 业务帐号ID
  federalId?: bigint; // 联邦业务帐号ID
  companyId?: bigint; // 公司ID，游客:null；员工:所属公司ID；工匠:当前合作公司ID；业主:当前项目服务公司ID；家人:当前业主的项目服务公司ID；
  companyName?: string; // 公司名称
  type?: CommonEnum; // 用户类型
  id?: bigint; // 用户ID，游客:AccountWx.ID；员工:员工ID；工匠:工匠ID；业主:业主ID；家人:家人ID；"
  name?: string; // 用户名称
  phone?: string; // 用户手机号
  avatar?: MediaFile; // 用户头像
}

export interface UserToken {
  token: string; // 用户登录凭证
  expiredTime: Date; // 有效截止时间
}

export interface SignInView {
  status?: CommonEnum; // 登录状态
  user?: User; // 当前用户
  tokenInfo?: UserToken; // 登录令牌信息
}

export interface AuthorityRouter extends RouteRecordNormalized {
  bizScope?: CommonEnum; // 适用业务域
  type?: CommonEnum; // 权限类型
  code?: string; // 权限编码
  title?: string; // 权限名称
  parentId?: bigint; // 父级权限ID，null则表示当前是根权限
  leaf?: boolean; // 是否叶子权限
  sort?: bigint; // 排序，值愈小优先级愈高
  // path?: string; // 页面相对路径
  // name?: string; // 页面名称，首字母大写
  // component?: string; // 页面组件
  // meta?: RouteMeta; // 页面元信息
  // parent?: AuthorityRouter; // 父级
  children: AuthorityRouter[]; // 子集
}

export interface Role {
  companyId: bigint; // 公司ID
  userType: CommonEnum; // 用户类型
  userId: bigint; // 用户ID
  roleId: bigint; // 角色ID
}

export interface UserPermissionView {
  companyId: bigint; // 公司ID
  userType: CommonEnum; // 用户类型
  userId: bigint; // 用户ID
  roleId: bigint; // 角色ID
  roleList: Role[]; // 角色
  authorityList: AuthorityRouter[]; // 全部权限集合
  menuAuthorityTree: AuthorityRouter; // 菜单类型权限树
  buttonAuthorityList: AuthorityRouter[]; // 按钮类型权限集合
}

export interface EmployeeAddCmd extends BaseCmd {
  scene?: CommonEnum;
  primaryId?: number; // 主帐号ID
  secondaryId?: number; // 业务帐号ID
  federalId?: number; // 联邦业务帐号ID
  companyId?: number; // 员工所属公司ID
  departmentId?: number; // 员工所属部门ID，每个员工都会就职于某个部门
  name?: string; // 员工姓名
  phone?: string; // 员工手机号码
  gender?: CommonEnum; // 员工性别 1男 0女
  inviterId?: number; // 邀请人ID
  roleIdList?: number[]; // 角色ID集合
}

export interface WorkerAddCmd extends BaseCmd {
  scene?: CommonEnum;
  primaryId?: number; // 主帐号ID
  secondaryId?: number; // 业务帐号ID
  federalId?: number; // 联邦业务帐号ID
  companyId?: number; // 员工所属公司ID
  departmentId?: number; // 员工所属部门ID，每个员工都会就职于某个部门
  type: CommonEnum; // 工种
  name?: string; // 员工姓名
  phone?: string; // 员工手机号码
  gender?: CommonEnum; // 员工性别 1男 0女
  inviterId?: number; // 邀请人ID
}

export interface TouristWxAddCmd extends BaseCmd {
  appType?: CommonEnum; // 微信应用，公众号｜小程序
  unionId?: string; // 微信用户UnionID
  openId?: string; // 微信用户OpenID
}

export interface SignUpCmd extends BaseCmd {
  scene?: any;
  phone?: string;
  code?: string;
  employee?: EmployeeAddCmd; // 员工注册信息
  worker?: any; // 工人注册信息
  touristWx?: any; // 游客注册信息
}

export interface SignUpView extends BaseView {
  status?: CommonEnum;
  user?: User;
}

export interface SignInCmd extends BaseCmd {
  scene?: string; // 操作场景
  bizScope?: string; // 业务应用域
  phone?: string; // 手机号
  code?: string; // 验证码
  wxCredential?: string; // 微信公众号临时二维码ticket｜微信小程序登录会话jsCode
}
